#!/bin/bash

# 定义要获取的网页 URL，从第一个命令行参数获取
url="$1"

# 定义一个数组，存放要提取的标签
declare -a tags=("title" "h1" "p" "a")

# 定义一个数组，存放提取到的信息
declare -A extracted_info

# 检查是否提供了 URL 参数
if [ -z "$url" ]; then
  echo "用法: $0 <URL>"
  exit 1
fi

echo "正在获取网页内容: $url ..."

# 使用 curl 获取网页内容，设置超时时间，跟随重定向，并设置 User-Agent
content=$(curl -m 10 -s -L -H 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36' "$url")

# 检查 curl 命令的退出状态
if [ $? -ne 0 ]; then
  echo "Error: 获取网页内容失败 (curl 错误码: $?)"
  # 尝试使用 wget 备份
  content=$(wget -q -O- "$url")
  if [ $? -ne 0 ]; then
    echo "Error: 获取网页内容失败 (wget 错误码: $?)"
    exit 1
  fi
fi

echo "--- 原始网页内容片段 (前 1000 字符) ---"
echo "${content:0:1000}..."
echo "--- 开始解析 ---"

# 循环遍历要提取的标签
for tag in "${tags[@]}"; do
  extracted_info["$tag"]="" # 初始化为空

  # 使用 sed 提取当前标签的所有内容
  matches=$(echo "$content" | sed -n "s/<$tag>\(.*\)<\/$tag>/\1/Ip")

  # 使用 while 循环处理 sed 匹配到的每一行
  count=0
  while IFS= read -r line; do
    if [ -n "$line" ]; then
      extracted_info["$tag"]+="$tag: $line\n"
      count=$((count + 1))
      # 嵌套的 for 循环，简单地打印每个字符
      if [ "$tag" == "title" ]; then
        echo "  [Title Char]:"
        for ((i=0; i<${#line}; i++)); do
          echo -n "${line:$i:1} "
        done
        echo ""
      fi
    fi
  done <<< "$matches"

  # 判断是否成功提取到当前标签的信息
  if [ "$count" -gt 0 ]; then
    echo "--- 提取到 '$tag' 标签 ($count 个) ---"
    echo "${extracted_info["$tag"]}"
  else
    echo "--- 未找到 '$tag' 标签 ---"
  fi
done

# 使用 until 循环检查是否所有标签都已处理完毕
processed_count=0
until [ "$processed_count" -eq "${#tags[@]}" ]; do
  echo "正在检查处理进度... (已处理 $processed_count / ${#tags[@]} 个标签)"
  processed_count=$((processed_count + 1))
  sleep 0.5 # 暂停 0.5 秒
done

echo "--- 解析完成 ---"

exit 0
